home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 2 / Mac Magazin and MacEasy Magazine CD - Issue 02.iso / Themen Mac Magazin / Multimedia / Grafik-&QT Tools / NIH Image 1.53 (non-fpu) / Macros / More Macros < prev    next >
Text File  |  1993-12-13  |  6KB  |  244 lines

  1. macro 'Fast Invert';
  2. begin
  3.   Invert;
  4. end;
  5.  
  6. macro 'Slow Invert';
  7. {
  8. This macro illustrates why it's not a good idea to use
  9. macros for pixel-by-pixel processing.
  10. }
  11. var
  12.   width,height,value,x,y:integer;
  13. begin
  14.   RequiresVersion(1.44);
  15.   GetPicSize(width,height);
  16.   for y:=0 to height-1 do begin
  17.     GetRow(0,y,width);
  18.     for x:=0 to width-1 do LineBuffer[x]:=255-LineBuffer[x];
  19.     PutRow(0,y,width);
  20.   end;
  21. end;
  22.  
  23. macro 'Draw Vertical Calibration Bar';
  24. var
  25.   left,top,width,height,i,x,y2,inc:integer;
  26.   y:real;
  27. begin
  28.   GetRoi(left,top,width,height);
  29.   if width=0 then begin
  30.     PutMessage('Make a selection first.');
  31.     exit;
  32.   end;
  33.   SetFont('Helvetica');
  34.   SetFontSize(10);
  35.   SetText('Plain; Left; no background');
  36.   SetLineWidth(1);
  37.   Setforeground(255);
  38.   DrawScale;
  39.   x:=left;
  40.   y:=top;
  41.   inc:=height/10;
  42.   for i:=1 to 11 do begin
  43.     MoveTo(x+width+10,round(y)+2);
  44.     y2:=round(y);
  45.     if i=11 then y2:=y2-1;
  46.     write(cvalue(GetPixel(x,y2)):1:2);
  47.     y:=y+inc;
  48.   end;
  49. end;
  50.  
  51. macro 'ASCII Dump';
  52. {
  53. Generates an alphanumeric listing of pixels values starting at
  54. the upper left corner of the current selection. 20 rows and 44 columns
  55. can be displayed with the default 552 x 436 window. The size of the window
  56. used to display the pixel values is determined by New Width and
  57. New Height in the Prefernces dialog box.
  58. }
  59. var
  60.   image,dump,roiLeft,roiTop,roiWidth,roiHeight:integer;
  61.   h,v,value,MaxWidth,MaxHeight,width,height:integer;
  62. begin
  63.   image:=PicNumber;
  64.   GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
  65.   if roiWidth=0 then begin
  66.     PutMessage('This macro requires a rectangular selection');
  67.     exit;
  68.   end;
  69.   SetForegroundColor(255);
  70.   SetBackgroundColor(0);
  71.   MakeNewWindow('ASCII Dump');
  72.   dump:=PicNumber;
  73.   GetPicSize(width,height);
  74.   MaxWidth:=width div 24 - 2;
  75.   MaxHeight:=height div 9 - 3;
  76.   if roiWidth>MaxWidth then roiWidth:=MaxWidth;
  77.   if roiHeight>MaxHeight then roiHeight:=MaxHeight;
  78.   SetFont('Monaco');
  79.   SetFontSize(9);
  80.   SetText('With background; Left Justified');
  81.   MoveTo(2,12);
  82.   write('    ');
  83.   for h:=roiLeft to roiLeft+roiWidth-1 do write(h:4);
  84.   writeln;
  85.   writeln;
  86.   for v:=roiTop to roiTop+roiHeight-1 do begin
  87.     write(v:3,' ');
  88.     for h:=roiLeft to roiLeft+roiWidth-1 do begin
  89.       ChoosePic(image);
  90.       value:=GetPixel(h,v);
  91.       ChoosePic(dump);
  92.       write(value:4);
  93.     end;
  94.     writeln;
  95.   end;
  96.   ChoosePic(image);
  97. end;
  98.  
  99.  
  100. macro 'Scale and Rotate All';
  101. {
  102. Resizes and/or rotates all currently open widows. For example,
  103. change the  ScaleAndRotate command below to
  104. ScaleAndRotate(2,2,0)  to change the size of all the images
  105. in a movie loop sequence from 128 x 128 to 256 x 256.
  106. }
  107. var
  108.   i:integer;
  109. begin
  110.   SaveState;
  111.   SetScaling('Bilinear; Create New Window');
  112.   for i:=1 to nPics do begin
  113.     ChoosePic(1);
  114.     ScaleAndRotate(1.9,1.9,0);
  115.     ChoosePic(1);
  116.     Close;
  117.   end;
  118.   for i:=1 to nPics do begin
  119.     ChoosePic(i);
  120.     SetPicName(i);
  121.   end;
  122.   RestoreState;
  123. end;
  124.  
  125.  
  126. macro 'Dispose All';
  127. begin
  128.   DisposeAll;
  129. end;
  130.  
  131. macro 'Average two Images';
  132.   {Generates the arithmetic average of two images.}
  133. begin
  134.   RequiresVersion(1.53);
  135.   if nPics<>2 then begin
  136.     PutMessage('This macro requires exactly two image windows to be open.');
  137.     Exit;
  138.   End;
  139.   ImageMath('add' ,1 ,2, 0.5, 0, 'Average');
  140.  end;
  141.  
  142.  
  143. macro 'Make Montage [M]';
  144. {Opens a new window and creates in it a composite image made from all}
  145. {currently open images. All the images must be the same size.}
  146. var
  147.   width,height,w,h,mWidth,mHeight,nWindows,left,top:integer;
  148.   RoiWidth,RoiHeight,RoiWidth,RoiHeight,i,hloc,vloc:integer;
  149.   montage,temp:integer;
  150.   scale:real;
  151.   SameSize:boolean;
  152. begin
  153.   nWindows:=nPics;
  154.   SameSize:=true;
  155.   GetPicSize(width,height);
  156.   for i:=1 to nPics do begin
  157.     SelectPic(i);
  158.     GetPicSize(w,h);
  159.     SameSize:=SameSize and (w=width) and (h=height);
  160.   end;
  161.   if (nWindows<2) or not SameSize then begin
  162.     PutMessage('This macro needs two or more images of the same size in order to create a montage.');
  163.     Exit;
  164.   end;
  165.   SetBackground(0);
  166.   MakeNewWindow('Montage');
  167.   montage:=nWindows+1;
  168.   GetPicSize(mWidth,mHeight);
  169.   SelectPic(1);
  170.   Duplicate('Temp');
  171.   temp:=nWindows+2;
  172.   scale:=GetNumber('Scaling Factor:',0.25);
  173.   hloc:=-(RoiWidth);
  174.   vloc:=0;
  175.   for i:=1 to nWindows do begin
  176.     SelectPic(i);
  177.     SelectAll;
  178.     copy;
  179.     SelectPic(temp);
  180.     paste;
  181.     SelectAll;
  182.     ScaleSelection(scale,scale);
  183.     RestoreRoi;
  184.     if i=1 then begin
  185.       GetRoi(left,top,RoiWidth,RoiHeight);
  186.       hloc:=-RoiWidth;
  187.       vloc:=0;
  188.     end;
  189.     Copy;
  190.     SelectPic(montage);
  191.     hloc:=hloc+RoiWidth;
  192.     if (hloc+RoiWidth)>mWidth then begin
  193.       hloc:=0;
  194.       vloc:=vloc+RoiHeight;
  195.     end;
  196.     MakeRoi(hloc,vloc,RoiWidth,RoiHeight);
  197.     Paste;
  198.   end;
  199.   KillRoi;
  200.   SelectPic(temp);
  201.   Dispose;
  202. end;
  203.  
  204.  
  205. macro 'Make Sine Wave';
  206. var
  207.   left,top,width,height,i:integer;
  208.   ppp,scale:real;
  209. begin
  210.   SaveState;
  211.   MakeNewWindow('Sine Wave');
  212.   SelectAll;
  213.   GetRoi(left,top,Width,Height);
  214.   if width=0 then begin
  215.     PutMessage('This macro requires a rectangular selection.');
  216.     Exit;
  217.   end;
  218.   ppp:=GetNumber('Pixels per period',100);
  219.   Scale:=ppp/6.28;
  220.   MakeRoi(left,top,1,height);
  221.   for i:=1 to width do begin
  222.     SetForeground(sin(i/scale)*127 +128);
  223.     {SetForeground((sin(i/scale)*127 +128)*(i+30)/(width));}
  224.     {SetForeground(sin(i/(ppp*((width-i+3)/width)/6.28))*127 +128);}
  225.     fill;
  226.     MoveRoi(1,0);
  227.   end;
  228.   KillRoi;
  229.   RestoreState;
  230. end;
  231.  
  232. macro '(---'; begin end;
  233.  
  234. {These macros allow you to easily switch}
  235. {transfer modes while pasting by tapping keys.}
  236. macro 'Copy Mode[1]'; begin SetOption; DoCopy; end;
  237. macro 'AND Mode[2]';  begin SetOption; DoAnd; end;
  238. macro 'OR Mode [3]';  begin SetOption; DoOr; end;
  239. macro 'XOR Mode[4]'; begin SetOption; DoXor; end;
  240. macro 'REPLACE Mode[5]';  begin SetOption; DoReplace; end;
  241. macro 'BLEND [6]';  begin SetOption; DoBlend; end;
  242. macro 'Terminate Paste [7]'; begin KillRoi end;
  243.  
  244.